"""
之前我们说过, 类可以根据传入的参数来生产出对象

所以自然也就有 属性 来进行区分到底能够生产出来怎么样的对象.

类属性分为三种:

公共属性, 也叫 静态属性, 每个通过类生产出来的对象的静态属性都是一样的
实例属性, 每个通过类生产出来的对象的实例属性都有可能是不同的
私有属性, 这个属性只能在 类方法 中使用
"""

# 公共属性

# class Car():
#     brand = "BMW"
#
# car1 = Car()
# car2 = Car()
#
# print(car1.brand)
# print(car2.brand)

"""
一个Car类, 负责生产车子, 那么我们可以把它品牌当作一个 公共属性
每个从这个类弄出来的车子,都是一个牌子的.
这个就是 公共属性, 每个对象都一样.
但是如果哪天这个 车厂子 换牌子了, 我们应该直接修改这个类的 公共属性
"""

# class Car():
#     brand = "BMW"
#
# car1 = Car()
# car2 = Car()
#
# print(car1.brand) # BMW
# print(car2.brand) # BMW
#
# car1.brand = "Benz"
# print(car1.brand) # Benz
# print(Car.brand) # BMW
#
# Car.brand = "Quattro"
#
# car3 = Car()
#
# print(Car.brand)  # Quattro
# print(car3.brand)  # Quattro

# 实例属性

# 实例属性可以通过以下方式来创建
# 在定义类的具体某个方法(函数)中直接使用 self.xxx = xxx 这种方式等我们学习了 类方法 后再说明
# 直接对象.xxx = xxx

# class Car():
#     brand = "BMW"
#     height = 1400
#     width = 4000
#
#
# car1 = Car()
# car2 = Car()
#
#
# car1.color = "blue"
# car2.color = "red"
#
# print(car1.color)  # blue
# print(car2.color)  # red

"""
我们将之前的 车厂子 增加了几个 公共属性, 车高/车宽

然后生产出来的车子, 每台车的颜色都是定制的, 所以颜色都有可能不同.

所以我们可以通过 实例属性 来定义不同的车子的颜色.

值得注意的是, 公共属性 在实例化出来一个对象之后, 都会变成这个对象的 实例属性
"""

# class Car():
#     brand = "BMW"
#     height = 1400
#     width = 4000
#
#
# car1 = Car()
# car2 = Car()
#
# car1.height = 1000
# print(car1.height)  # 1000
# print(car2.height)  # 1400

# 私有属性

"""
私有属性只能在 类定义的方法中使用

私有属性就是 私有化, 外部不可见, 想要使用只能通过类特定的方法来获取.

其目的就是保护某些敏感数据.

假设这个 私有属性 是一个极其敏感的密码字符串

你必须要通过这个方法的身份校验才可以获取到.
"""
# class Password():
#     __password = "123456"  # 双下划线开头
#     _password = "1234567"
#
#     def getPassword(self, name):
#         if name == "muzhou":
#             return self.__password
#         else:
#             return "身份校验失败, 无法获取"
#
#
# password = Password()
#
# print(password.getPassword("mz"))
# print(password.getPassword("muzhou"))
# print(password.__password)  # 无法直接获取, 会报错